package com.wp.template.general;

/**
 * 抽象模板类
 * 定义算法骨架，具体步骤由子类实现
 *
 * @Date 2025/11/23
 * @Author wangpeng
 * @Description 模板方法模式抽象类
 */
public abstract class AbstractClass {
    /**
     * 步骤1 - 基础实现
     * protected修饰：子类和同包类可以访问和重写
     */
    protected void step1() {
        System.out.println("AbstractClass:step1");
    }

    /**
     * 步骤2 - 基础实现
     * protected修饰：子类和同包类可以访问和重写
     */
    protected void step2() {
        System.out.println("AbstractClass:step2");
    }

    /**
     * 步骤3 - 基础实现
     * protected修饰：子类和同包类可以访问和重写
     */
    protected void step3() {
        System.out.println("AbstractClass:step3");
    }

    /**
     * 模板方法 - 定义算法骨架
     * final修饰防止子类改变算法结构
     * public修饰允许外部调用
     */
    public final void templateMethod() {
        System.out.println("=== 开始执行模板方法 ===");
        this.step1();
        this.step2();
        this.step3();
        System.out.println("=== 模板方法执行结束 ===\n");
    }
}


/*public abstract class AbstractClass {
    //只能被子类调用，外部不能访问
    protected void step1(){
        System.out.println("AbstractClass:step1");
    }
    protected void step2(){
        System.out.println("AbstractClass:step2");
    }
    protected void step3(){
        System.out.println("AbstractClass:step3");
    }
    //可以给外部调用，执行步骤已经安排好了，但是允许中间可以由用户来实现
    //声明为final方法，避免子类重写
    public final void templateMethod(){
        this.step1();
        this.step2();
        this.step3();
    }
}*/
